﻿/* tslint:disable:jsdoc-format max-line-length */
// warning: Generated code! Do not change!
module App.Models {
	"use strict";
	// enums
	// interfaces
	// models
	export interface IACCar {
		id: number;
		name: string;
	}

	export class ACCar implements IACCar {
		id: number;
		name: string;
		constructor(data?: IACCar) {
			this.id = data ? data.id : null;
			this.name = data ? data.name : null;
		}
	}

	export interface IACConfigBase {
		id: number;
	}

	export class ACConfigBase implements IACConfigBase {
		id: number;
		constructor(data?: IACConfigBase) {
			this.id = data ? data.id : null;
		}
	}

	export interface IACConfigBooking extends IACConfigBase {
		name: string;
		time: number;
	}

	export class ACConfigBooking implements IACConfigBooking {
		name: string;
		time: number;
		id: number;
		constructor(data?: IACConfigBooking) {
			this.name = data ? data.name : null;
			this.time = data ? data.time : null;
			this.id = data ? data.id : null;
		}
	}

	export interface IACConfigDynamicTrack extends IACConfigBase {
		sessionStart: number;
		randomness: number;
		lapGain: number;
		sessionTransfer: number;
	}

	export class ACConfigDynamicTrack implements IACConfigDynamicTrack {
		sessionStart: number;
		randomness: number;
		lapGain: number;
		sessionTransfer: number;
		id: number;
		constructor(data?: IACConfigDynamicTrack) {
			this.sessionStart = data ? data.sessionStart : null;
			this.randomness = data ? data.randomness : null;
			this.lapGain = data ? data.lapGain : null;
			this.sessionTransfer = data ? data.sessionTransfer : null;
			this.id = data ? data.id : null;
		}
	}

	export interface IACConfigPractice extends IACConfigBase {
		name: string;
		time: number;
		waitTime: number;
	}

	export class ACConfigPractice implements IACConfigPractice {
		name: string;
		time: number;
		waitTime: number;
		id: number;
		constructor(data?: IACConfigPractice) {
			this.name = data ? data.name : null;
			this.time = data ? data.time : null;
			this.waitTime = data ? data.waitTime : null;
			this.id = data ? data.id : null;
		}
	}

	export interface IACConfigQualify extends IACConfigBase {
		name: string;
		time: number;
		waitTime: number;
	}

	export class ACConfigQualify implements IACConfigQualify {
		name: string;
		time: number;
		waitTime: number;
		id: number;
		constructor(data?: IACConfigQualify) {
			this.name = data ? data.name : null;
			this.time = data ? data.time : null;
			this.waitTime = data ? data.waitTime : null;
			this.id = data ? data.id : null;
		}
	}

	export interface IACConfigRace extends IACConfigBase {
		name: string;
		laps: number;
		waitTime: number;
	}

	export class ACConfigRace implements IACConfigRace {
		name: string;
		laps: number;
		waitTime: number;
		id: number;
		constructor(data?: IACConfigRace) {
			this.name = data ? data.name : null;
			this.laps = data ? data.laps : null;
			this.waitTime = data ? data.waitTime : null;
			this.id = data ? data.id : null;
		}
	}

	export interface IACConfigServer extends IACConfigBase {
		name: string;
		password: string;
		adminPassword: string;
		clientSendInterval: number;
		portUdp: number;
		portTcp: number;
		portHttp: number;
		sleepTime: number;
		blacklistMode: number;
		loopMode: boolean;
		registerToLobby: boolean;
		maxClients: number;
		pickupMode: boolean;
		cars: Array<Models.IACCar>;
		tracks: Array<Models.IACTrack>;
		trackConfigs: Array<Models.IACTrack>;
		sunAngle: number;
		raceOvertime: number;
		votingQuorum: number;
		voteDuration: number;
		kickQuorum: number;
		tCAllowed: number;
		absAllowed: number;
		stabilityAllowed: boolean;
		autoclutchAllowed: boolean;
		damageMultipier: number;
		fuelRate: number;
		allowedTiresOut: number;
		tireWearRate: number;
		tireBlanketsAllowed: boolean;
	}

	export class ACConfigServer implements IACConfigServer {
		name: string;
		password: string;
		adminPassword: string;
		clientSendInterval: number;
		portUdp: number;
		portTcp: number;
		portHttp: number;
		sleepTime: number;
		blacklistMode: number;
		loopMode: boolean;
		registerToLobby: boolean;
		maxClients: number;
		pickupMode: boolean;
		cars: Array<Models.IACCar>;
		tracks: Array<Models.IACTrack>;
		trackConfigs: Array<Models.IACTrack>;
		sunAngle: number;
		raceOvertime: number;
		votingQuorum: number;
		voteDuration: number;
		kickQuorum: number;
		tCAllowed: number;
		absAllowed: number;
		stabilityAllowed: boolean;
		autoclutchAllowed: boolean;
		damageMultipier: number;
		fuelRate: number;
		allowedTiresOut: number;
		tireWearRate: number;
		tireBlanketsAllowed: boolean;
		id: number;
		constructor(data?: IACConfigServer) {
			this.name = data ? data.name : null;
			this.password = data ? data.password : null;
			this.adminPassword = data ? data.adminPassword : null;
			this.clientSendInterval = data ? data.clientSendInterval : null;
			this.portUdp = data ? data.portUdp : null;
			this.portTcp = data ? data.portTcp : null;
			this.portHttp = data ? data.portHttp : null;
			this.sleepTime = data ? data.sleepTime : null;
			this.blacklistMode = data ? data.blacklistMode : null;
			this.loopMode = data ? data.loopMode : null;
			this.registerToLobby = data ? data.registerToLobby : null;
			this.maxClients = data ? data.maxClients : null;
			this.pickupMode = data ? data.pickupMode : null;
			this.cars = data ? data.cars : null;
			this.tracks = data ? data.tracks : null;
			this.trackConfigs = data ? data.trackConfigs : null;
			this.sunAngle = data ? data.sunAngle : null;
			this.raceOvertime = data ? data.raceOvertime : null;
			this.votingQuorum = data ? data.votingQuorum : null;
			this.voteDuration = data ? data.voteDuration : null;
			this.kickQuorum = data ? data.kickQuorum : null;
			this.tCAllowed = data ? data.tCAllowed : null;
			this.absAllowed = data ? data.absAllowed : null;
			this.stabilityAllowed = data ? data.stabilityAllowed : null;
			this.autoclutchAllowed = data ? data.autoclutchAllowed : null;
			this.damageMultipier = data ? data.damageMultipier : null;
			this.fuelRate = data ? data.fuelRate : null;
			this.allowedTiresOut = data ? data.allowedTiresOut : null;
			this.tireWearRate = data ? data.tireWearRate : null;
			this.tireBlanketsAllowed = data ? data.tireBlanketsAllowed : null;
			this.id = data ? data.id : null;
		}
	}

	export interface IACServer {
		id: number;
		name: string;
		running: boolean;
		configurations: /** System.Collections.ObjectModel.Collection<ACServerApi.Models.ACConfigBase> **/ any;
	}

	export class ACServer implements IACServer {
		id: number;
		name: string;
		running: boolean;
		configurations: /** System.Collections.ObjectModel.Collection<ACServerApi.Models.ACConfigBase> **/ any;
		constructor(data?: IACServer) {
			this.id = data ? data.id : null;
			this.name = data ? data.name : null;
			this.running = data ? data.running : null;
			this.configurations = data ? data.configurations : null;
		}
	}

	export interface IACTrack {
		id: number;
		name: string;
		config: string;
	}

	export class ACTrack implements IACTrack {
		id: number;
		name: string;
		config: string;
		constructor(data?: IACTrack) {
			this.id = data ? data.id : null;
			this.name = data ? data.name : null;
			this.config = data ? data.config : null;
		}
	}

}